/********************************************************
*Definicion de la estructura que representa variables   *
*Author     :   Simon Emmanuel Gutierrez Brida          *
*Version    :   0.1                                     *
*Fecha      :   Septiembre/2011                         *
*----------------------------------------------------   *
*Define la estructura de las variables y funciones      *
*asociadas                                              *
*                                                       *
*Una variable va a tener :                              *
*- nombre   :   identificador de la variable            *
*- tipo     :   identificador del tipo de la variable   *
*********************************************************/

#ifndef VARIABLE_H
#define VARIABLE_H

#include <stdbool.h>

/*definicion de la estructura*/

typedef struct {
    char *id;
    int tipo;
    int offset;
} Variable;

/*funciones publicas para manipular variables*/

/*constructores*/

/**
 * Construye una nueva variable
 * parametros
 * id: el nombre de la variable
 * autoOffset: activa o desactiva la autogeneracion de offset
 */
Variable* nuevaVariable_id(char *id, bool autoOffset);

/**
 * Construye una nueva variable
 * parametros
 * id: el nombre de la variable
 * tipo: define el tipo de la variable
 * autoOffset: activa o desactiva la autogeneracion de offset
 */
Variable* nuevaVariable_id_tipo(char *id, int tipo, bool autoOffset);

/**
 * Construye una nueva variable
 * parametros
 * id: el nombre de la variable
 * tipo: define el tipo de la variable
 * offset: define manualmente el offset de la variable
 */
Variable* nuevaVariable_id_tipo_offset(char *id, int tipo, int offset);

/*lectura de informacion*/

/**
 * Retorna el id de una variable
 * parametros
 * var: la variable de la cual obtener el id
 */
char* obtenerIdentificador(Variable *var);

/**
 * Retorna el tipo de una variable
 * parametros
 * var: la variable de la cual obtener el tipo
 */
int obtenerTipo(Variable *var);

/**
 * Retorna el offset de una variable
 * parametros
 * var: la variable de la cual obtener el offset
 */
int obtenerOffset(Variable *var);

/*escritura de informacion*/

/**
 * Define el id de una variable
 * parametros
 * var: la variable a la cual se le va a definir el id
 * id: el nuevo id de la variable
 */
void definirIdentificador(Variable *var, char *id);

/**
 * Define el id de una variable
 * parametros
 * var: la variable a la cual se le va a definir el tipo
 * tipo: el nuevo tipo de la variable
 */
void definirTipo(Variable *var, int tipo);

/**
 * Define el id de una variable
 * parametros
 * var: la variable a la cual se le va a definir el offset
 * offset: el nuevo offset de la variable
 */
void definirOffset(Variable *var, int offset);

#endif